#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 5.7.1 (swiftlang-5.7.1.135.3 clang-1400.0.29.51)
#ifndef INMOBISDK_SWIFT_H
#define INMOBISDK_SWIFT_H
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wduplicate-method-match"
#pragma clang diagnostic ignored "-Wauto-import"
#if defined(__OBJC__)
#include <Foundation/Foundation.h>
#endif
#if defined(__cplusplus)
#include <cstdint>
#include <cstddef>
#include <cstdbool>
#else
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#endif

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...)
# endif
#endif

#if __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if __has_attribute(ns_consumed)
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
#else
# define SWIFT_RELEASES_ARGUMENT
#endif
#if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
#else
# define SWIFT_NORETURN
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if __has_feature(attribute_diagnose_if_objc)
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
#else
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
#endif
#if defined(__OBJC__)
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#endif
#if !defined(SWIFT_EXTERN)
# if defined(__cplusplus)
#  define SWIFT_EXTERN extern "C"
# else
#  define SWIFT_EXTERN extern
# endif
#endif
#if !defined(SWIFT_CALL)
# define SWIFT_CALL __attribute__((swiftcall))
#endif
#if defined(__cplusplus)
#if !defined(SWIFT_NOEXCEPT)
# define SWIFT_NOEXCEPT noexcept
#endif
#else
#if !defined(SWIFT_NOEXCEPT)
# define SWIFT_NOEXCEPT 
#endif
#endif
#if defined(__cplusplus)
#if !defined(SWIFT_CXX_INT_DEFINED)
#define SWIFT_CXX_INT_DEFINED
namespace swift {
using Int = ptrdiff_t;
using UInt = size_t;
}
#endif
#endif
#if defined(__OBJC__)
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import CoreFoundation;
@import Foundation;
@import ObjectiveC;
@import UIKit;
#endif

#endif
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="InMobiSDK",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

#if defined(__OBJC__)
@class NSString;

SWIFT_CLASS("_TtC9InMobiSDK12IMAdMetaInfo")
@interface IMAdMetaInfo : NSObject
/// CreativeID of the ad.
@property (nonatomic, readonly, copy) NSString * _Nullable creativeID;
/// Bid info Dictionary of the ad.
@property (nonatomic, readonly, copy) NSDictionary<NSString *, id> * _Nonnull bidInfo;
/// Bidvalue of the ad.
- (double)getBid SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol IMBannerDelegate;
@protocol IMBannerAudioDelegate;
@class IMBannerPreloadManager;
@class NSCoder;
@class NSData;
@class UIWindow;

/// Class to integrate banner ads in your application
/// Adding banner ads is demonstrated in the code fragment below.
/// Implement the following in the view controller.
/// Swift code snippet:
/// \code
/// let banner = IMBanner(frame: CGRect(x:0, y:50, width:320, height:50), placementId: 11203280001, delegate: self)
/// banner.load()
/// self.view.addSubview(banner)
///
/// \endcodeObjective-C code snippet:
/// \code
/// self.banner = [[IMBanner alloc] initWithFrame:CGRectMake(0, 400, 320, 50) placementId:11203280001 delegate:self];
/// [self.banner load];
/// [self.view addSubview:self.banner];
///
/// \endcodeThe code snippet above demonstrates a dead simple integration. Your application code can additionally listen for lifecycle events on the banner ad by implementing the <code>IMBannerDelegate</code>.
SWIFT_CLASS("_TtC9InMobiSDK8IMBanner")
@interface IMBanner : UIView
/// The placement ID for this banner.
@property (nonatomic) int64_t placementId;
/// The delegate for the banner to notify of events.
@property (nonatomic, weak) id <IMBannerDelegate> _Nullable delegate;
/// The delegate for the banner to notify of audio related events.
@property (nonatomic, weak) id <IMBannerAudioDelegate> _Nullable audioDelegate;
/// The refresh interval for the banner specified in seconds.
@property (nonatomic) NSInteger refreshInterval;
/// A free form set of keywords, separated by ‘,’ to be sent with the ad request.
/// E.g: “sports,cars,bikes”
@property (nonatomic, copy) NSString * _Nullable keywords;
/// Any additional information to be passed to InMobi.
@property (nonatomic, copy) NSDictionary<NSString *, id> * _Nullable extras;
/// The transition animation to be performed between refreshes.
@property (nonatomic) enum UIViewAnimationTransition transitionAnimation;
/// contentUrl for OMSDK
@property (nonatomic, copy) NSString * _Nullable contentUrl;
/// A unique identifier for the creative.
@property (nonatomic, readonly, copy) NSString * _Nullable creativeId;
/// The preload Manager for Preload flow.
@property (nonatomic, readonly, strong) IMBannerPreloadManager * _Nonnull preloadManager;
/// A boolean to indicate whether the banner is of type audio
@property (nonatomic, readonly) BOOL isAudioAd;
/// Initializes an <code>IMBanner</code> instance with the specified frame and default placementId.
/// \param frame CGRect for this view, according to the requested size.
///
- (nonnull instancetype)initWithFrame:(CGRect)frame;
/// Initializes an <code>IMBanner</code> instance with the specified placementId
/// \param frame CGRect for this view, according to the requested size.
///
/// \param placementId the placement Id registered on the InMobi portal.
///
- (nonnull instancetype)initWithFrame:(CGRect)frame placementId:(int64_t)placementId;
/// Initializes an <code>IMBanner</code> instance with the specified <code>placementId</code> and delegate.
/// \param frame CGRect for this view, according to the requested size.
///
/// \param placementId the placement Id registered on the InMobi portal.
///
/// \param delegate The delegate to receive callbacks.
///
- (nonnull instancetype)initWithFrame:(CGRect)frame placementId:(int64_t)placementId delegate:(id <IMBannerDelegate> _Nullable)delegate OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder SWIFT_UNAVAILABLE;
/// Loads a banner with default values.
- (void)load;
/// Loads a Banner Ad with a response Object. This is used for Open Auction use cases
/// \param response An NSData object which contains the InMobi Banner Ad.
///
- (void)load:(NSData * _Nonnull)response;
/// Specifies if the banner should auto refresh
/// \param shouldAutoRefresh if the banner should be refreshed.
///
- (void)shouldAutoRefresh:(BOOL)shouldAutoRefresh;
/// Contains additional information of ad.
- (NSDictionary<NSString *, id> * _Nullable)getAdMetaInfo SWIFT_WARN_UNUSED_RESULT;
/// Releases memory and remove ad from screen.
- (void)cancel;
/// overridden <code>UIView</code> method
- (void)willMoveToWindow:(UIWindow * _Nullable)newWindow;
@end





enum IMBannerAudioStatus : NSInteger;

/// A listener for receiving notifications during the lifecycle of a banner audio ad.
SWIFT_PROTOCOL("_TtP9InMobiSDK21IMBannerAudioDelegate_")
@protocol IMBannerAudioDelegate
@optional
/// Notifies the delegate that audio state has changed.
- (void)banner:(IMBanner * _Nonnull)banner audioStatusChanged:(enum IMBannerAudioStatus)status;
@end


/// A public class to listen to Audio changes on <code>IMBanner</code> object by passing the Parent view of <code>IMBanner</code> i.e with Mediation.
SWIFT_CLASS("_TtC9InMobiSDK20IMBannerAudioHandler")
@interface IMBannerAudioHandler : NSObject
/// Use this function to set the delegate and <code>IMBanner</code> instance by sending the Parent view, i.e the Mediation Banner view.
/// \param view Parent view of <code>IMBanner</code> instance
///
/// \param delegate A delegate object to recieve callbacks on
///
- (void)onView:(UIView * _Nonnull)view addBannerAudioDelegate:(id <IMBannerAudioDelegate> _Nonnull)delegate;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// An enum representing the status of audio playing in banner
typedef SWIFT_ENUM(NSInteger, IMBannerAudioStatus, closed) {
  IMBannerAudioStatusPlaying = 1,
  IMBannerAudioStatusPaused = 2,
  IMBannerAudioStatusCompleted = 3,
};

@class IMRequestStatus;

/// A listener for receiving notifications during the lifecycle of a banner ad.
/// <blockquote>
/// Note: All the events in this listener will be invoked on your application’s UI thread.
/// In most cases your application will need to listen for the following events on a banner ad.
///
/// </blockquote>
/// The outcome of an ad request (if the request succeeded or failed): see
/// For Swift:
/// \code
/// func bannerDidFinishLoading(_ banner: IMBanner)
/// func banner(_ banner: IMBanner, didFailToLoadWithError error: IMRequestStatus)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) bannerDidFinishLoading: (IMBanner*)banner;
/// - (void) banner: (IMBanner*)banner didFailToLoadWithError:(IMRequestStatus*)error;
///
/// \endcodeThe ad opened an overlay that covered the screen. This means that the user can no longer interact with your application; see
/// For Swift:
/// \code
/// func bannerDidPresentScreen(_ banner: IMBanner)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) bannerDidPresentScreen: (IMBanner*)banner;
///
/// \endcodeThe ad overlay opened was dismissed. The user is now free to interact with your application; see
/// For Swift:
/// \code
/// func bannerDidDismissScreen(_ banner: IMBanner)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) bannerDidDismissScreen: (IMBanner*)banner;
///
/// \endcodeA user interaction with the ad will result in the User leaving your application context; see
/// For Swift:
/// \code
/// func userWillLeaveApplicationFromBanner(_ banner: IMBanner)
///
/// \endcodeFor Objective-C:
/// \code
/// -(void) userWillLeaveApplicationFromBanner:(IMBanner*)banner;
///
/// \endcode
SWIFT_PROTOCOL("_TtP9InMobiSDK16IMBannerDelegate_")
@protocol IMBannerDelegate
@optional
/// Notifies the delegate that the banner has finished loading
- (void)bannerDidFinishLoading:(IMBanner * _Nonnull)banner;
/// Notifies the delegate that the banner has recieved the ad with the meta/transaction info.
- (void)banner:(IMBanner * _Nonnull)banner didReceiveWithMetaInfo:(IMAdMetaInfo * _Nonnull)info;
/// Notifies the delegate that the banner has failed to preload with some error.
/// It will only be recieved when preload is called.
- (void)banner:(IMBanner * _Nonnull)banner didFailToReceiveWithError:(IMRequestStatus * _Nonnull)error;
/// Notifies the delegate that the banner has failed to load with some error.
- (void)banner:(IMBanner * _Nonnull)banner didFailToLoadWithError:(IMRequestStatus * _Nonnull)error;
/// Notifies the delegate that the banner ad impression has been tracked
- (void)bannerAdImpressed:(IMBanner * _Nonnull)banner;
/// Notifies the delegate that the banner was interacted with.
- (void)banner:(IMBanner * _Nonnull)banner didInteractWithParams:(NSDictionary<NSString *, id> * _Nullable)params;
/// Notifies the delegate that the user would be taken out of the application context.
- (void)userWillLeaveApplicationFromBanner:(IMBanner * _Nonnull)banner;
/// Notifies the delegate that the banner would be presenting a full screen content.
- (void)bannerWillPresentScreen:(IMBanner * _Nonnull)banner;
/// Notifies the delegate that the banner has finished presenting screen.
- (void)bannerDidPresentScreen:(IMBanner * _Nonnull)banner;
/// Notifies the delegate that the banner will start dismissing the presented screen.
- (void)bannerWillDismissScreen:(IMBanner * _Nonnull)banner;
/// Notifies the delegate that the banner has dismissed the presented screen.
- (void)bannerDidDismissScreen:(IMBanner * _Nonnull)banner;
/// Notifies the delegate that the user has completed the action to be incentivised with.
- (void)banner:(IMBanner * _Nonnull)banner rewardActionCompletedWithRewards:(NSDictionary<NSString *, id> * _Nonnull)rewards;
@end


SWIFT_CLASS("_TtC9InMobiSDK22IMBannerPreloadManager")
@interface IMBannerPreloadManager : NSObject
/// Preloads a Banner ad
/// It returns the following callback.
/// <ul>
///   <li>
///     Meta Information will be recieved from the callback <code>banner:didReceiveWithMetaInfo</code>
///   </li>
///   <li>
///     Failure of Preload will be recieved from the callback <code>banner:didFailToReceiveWithError</code>
///   </li>
/// </ul>
- (void)preload;
/// Loads a Preloaded Banner ad.
- (void)load;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end



SWIFT_CLASS("_TtC9InMobiSDK17IMCommonConstants")
@interface IMCommonConstants : NSObject
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull IM_GDPR_CONSENT_AVAILABLE;)
+ (NSString * _Nonnull)IM_GDPR_CONSENT_AVAILABLE SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull IM_GDPR_CONSENT_IAB;)
+ (NSString * _Nonnull)IM_GDPR_CONSENT_IAB SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull IM_SUBJECT_TO_GDPR;)
+ (NSString * _Nonnull)IM_SUBJECT_TO_GDPR SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull IM_PARTNER_GDPR_CONSENT_AVAILABLE;)
+ (NSString * _Nonnull)IM_PARTNER_GDPR_CONSENT_AVAILABLE SWIFT_WARN_UNUSED_RESULT;
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull IM_PARTNER_GDPR_APPLIES;)
+ (NSString * _Nonnull)IM_PARTNER_GDPR_APPLIES SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@protocol IMInterstitialDelegate;
@class IMInterstitialPreloadManager;
@class UIViewController;
enum IMInterstitialAnimationType : NSInteger;

/// Class to integrate interstitial ads in your application
/// Adding interstitial ads is demonstrated in the code fragment below
/// Implement the following in the viewcontroller
/// Swift code snippet:
/// \code
/// let interstitial = IMInterstitial(placementId: 11203280002, delegate: self)
/// interstitial.load()
///
/// \endcodeObjective-C code snippet:
/// \code
/// self.interstitial = [[IMInterstitial alloc] initWithPlacementId:11203280002 delegate:self];
/// [self.interstitial load];
///
/// \endcodeThe code snippet above demonstrates a dead simple integration. Your application code can additionally listen for lifecycle events on the interstitial ad by implementing the <code>IMInterstitialDelegate</code>.
SWIFT_CLASS("_TtC9InMobiSDK14IMInterstitial")
@interface IMInterstitial : NSObject
/// The placement ID for this Interstitial.
@property (nonatomic) int64_t placementId;
/// The delegate to receive callbacks
@property (nonatomic, weak) id <IMInterstitialDelegate> _Nullable delegate;
/// A free form set of keywords, separated by ‘,’ to be sent with the ad request.
/// E.g: “sports,cars,bikes”
@property (nonatomic, copy) NSString * _Nullable keywords;
/// Any additional information to be passed to InMobi.
@property (nonatomic, copy) NSDictionary<NSString *, id> * _Nullable extras;
/// contentUrl for OMSDK
@property (nonatomic, copy) NSString * _Nullable contentUrl;
/// A unique identifier for the creative.
@property (nonatomic, readonly, copy) NSString * _Nullable creativeId;
/// The preload Manager for Preload flow.
@property (nonatomic, readonly, strong) IMInterstitialPreloadManager * _Nonnull preloadManager;
/// Initializes an IMInterstitial instance with the specified placementId.
/// \param placementId the placement Id registered on the InMobi portal.
///
- (nonnull instancetype)initWithPlacementId:(int64_t)placementId;
/// Initializes an IMInterstitial instance with the specified placementId and delegate.
/// \param placementId the placement Id registered on the InMobi portal.
///
/// \param delegate the delegate to receive callbacks.
///
- (nonnull instancetype)initWithPlacementId:(int64_t)placementId delegate:(id <IMInterstitialDelegate> _Nullable)delegate OBJC_DESIGNATED_INITIALIZER;
/// Loads an Interstitial
- (void)load;
/// Loads an Interstitial Ad with a response Object. This is used for Open Auction use cases
/// \param response An NSData object which contains the InMobi Interstitial Ad.
///
- (void)load:(NSData * _Nonnull)response;
/// To query if the interstitial is ready to be shown
- (BOOL)isReady SWIFT_WARN_UNUSED_RESULT;
/// Displays the interstitial on the screen
/// \param viewController this view controller will be used to present interestitial.
///
- (void)showFrom:(UIViewController * _Nonnull)viewController;
/// Displays the interstitial on the screen
/// \param viewController this view controller will be used to present interestitial.
///
/// \param animationType The transition type for interstitial presentation.
///
- (void)showFrom:(UIViewController * _Nonnull)viewController with:(enum IMInterstitialAnimationType)animationType;
/// Contains additional information of ad.
- (NSDictionary<NSString *, id> * _Nullable)getAdMetaInfo SWIFT_WARN_UNUSED_RESULT;
/// Releases memory and remove ad from screen.
- (void)cancel;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end





/// Interstitial Animation type
typedef SWIFT_ENUM(NSInteger, IMInterstitialAnimationType, closed) {
  IMInterstitialAnimationTypeCoverVertical = 0,
  IMInterstitialAnimationTypeFlipHorizontal = 1,
  IMInterstitialAnimationTypeAsNone = 2,
};


/// A listener for receiving notifications during the lifecycle of an interstitial.
/// <blockquote>
/// Note: All the events in this listener will be invoked on your application’s UI thread.
///
/// </blockquote>
/// In most cases your application will need to listen for the following events on an interstitial
/// Information about the full screen ad is available. But the assets (associated with the ad) are not yet available: see
/// For Swift:
/// \code
/// func interstitial(_ interstitial: IMInterstitial, didReceiveWithMetaInfo metaInfo: IMAdMetaInfo)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) interstitial: (IMInterstitial *)interstitial didReceiveWithMetaInfo:(IMAdMetaInfo *)metaInfo;
///
/// \endcodeA full screen ad is not available and hence information about it can not be retrieved. A proper error is avaiable for listener: see
/// For Swift:
/// \code
/// func interstitial(_ interstitial: IMInterstitial, didFailToReceiveWithError error: Error)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) interstitial: (IMInterstitial *)interstitial didFailToReceiveWithError: (NSError *)error
///
/// \endcodeThe full screen ad is available. But the assets (associated with the ad) are not yet available: see
/// For Swift:
/// \code
/// func interstitialDidReceiveAd(_ interstitial: IMInterstitial)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) interstitialDidReceiveAd: (IMInterstitial *)interstitial;
///
/// \endcodeThe outcome of an ad request (if the request succeeded or failed); see
/// For Swift:
/// \code
/// func interstitialDidFinishLoading(_ interstitial: IMInterstitial)
/// func interstitial(_ interstitial: IMInterstitial, didFailToLoadWithError error: IMRequestStatus)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) interstitialDidFinishLoading: (IMInterstitial*)interstitial;
/// - (void)interstitial: (IMInterstitial*)interstitial didFailToLoadWithError: (IMRequestStatus*)error;
///
/// \endcodeThe full screen ad is about to be displayed: see
/// For Swift:
/// \code
/// func interstitialWillPresent(_ interstitial: IMInterstitial)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) interstitialWillPresent: (IMInterstitial*)interstitial;
///
/// \endcodeThe full screen ad is displayed that covered the screen. This means that the user can no longer interact with your application; see
/// For Swift:
/// \code
/// func interstitialDidPresent(_ interstitial: IMInterstitial)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) interstitialDidPresent: (IMInterstitial *)interstitial;
///
/// \endcodeThe full screen ad failed to be displayed. A proper error is available for listener: see
/// For Swift:
/// \code
/// func interstitial(_ interstitial: IMInterstitial, didFailToPresentWithError error: IMRequestStatus)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) interstitial: (IMInterstitial*)interstitial didFailToPresentWithError: (IMRequestStatus*)error;
///
/// \endcodeThe full screen ad is about to be dismissed: see
/// For Swift:
/// \code
/// func interstitialWillDismiss(_ interstitial: IMInterstitial)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) interstitialWillDismiss: (IMInterstitial*)interstitial;
///
/// \endcodeThe full screen ad was dismissed. The user is now free to interact with your application: see
/// For Swift:
/// \code
/// func interstitialDidDismiss(_ interstitial: IMInterstitial)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) interstitialDidDismiss: (IMInterstitial*)interstitial;
///
/// \endcodeThe user interacted with the full screen ad: see
/// For Swift:
/// \code
/// func interstitial(_ interstitial: IMInterstitial, didInteractWithParams params: [String: Any]?)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) interstitial: (IMInterstitial*)interstitial didInteractWithParams: (NSDictionary*)params;
///
/// \endcodeA user interaction with the ad will result in the User leaving your application context: see
/// For Swift:
/// \code
/// func userWillLeaveApplicationFromInterstitial(_ interstitial: IMInterstitial)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) userWillLeaveApplicationFromInterstitial: (IMInterstitial*)interstitial;
///
/// \endcodeIf your application involves running rewarded or incentivised ads, then you should, in addition to the above events, also listen for the <code>rewardActionCompletedWithRewards</code> event
/// For Swift:
/// \code
/// func interstitial(_ interstitial: IMInterstitial, rewardActionCompletedWithRewards rewards: [String: Any])
///
/// \endcodeFor Objective-C:
/// \code
/// - (void)interstitial: (IMInterstitial*)interstitial rewardActionCompletedWithRewards: (NSDictionary*)rewards;
///
/// \endcodeand handle it appropriately to unlock rewards for the user of your app.
SWIFT_PROTOCOL("_TtP9InMobiSDK22IMInterstitialDelegate_")
@protocol IMInterstitialDelegate
@optional
/// Notifies the delegate that the ad server has returned an ad.
/// Assets are not yet available.
/// Please use <code>interstitialDidFinishLoading:</code> to receive a callback when assets are also available.
- (void)interstitial:(IMInterstitial * _Nonnull)interstitial didReceiveWithMetaInfo:(IMAdMetaInfo * _Nonnull)metaInfo;
/// Notifies the delegate that the interstitial has failed to recieve an Ad(failed to preload an ad) with some error.
/// This callback will only be recieved when Preload is called.
- (void)interstitial:(IMInterstitial * _Nonnull)interstitial didFailToReceiveWithError:(NSError * _Nonnull)error;
/// Notifies the delegate that the ad server has returned an ad.
/// Assets are not yet available.
/// Please use <code>interstitialDidFinishLoading:</code> to receive a callback when assets are also available.
- (void)interstitialDidReceiveAd:(IMInterstitial * _Nonnull)interstitial;
/// Notifies the delegate that the interstitial has finished loading and can be shown instantly.
- (void)interstitialDidFinishLoading:(IMInterstitial * _Nonnull)interstitial;
/// Notifies the delegate that the interstitial has failed to load with some error.
- (void)interstitial:(IMInterstitial * _Nonnull)interstitial didFailToLoadWithError:(IMRequestStatus * _Nonnull)error;
/// Notifies the delegate that the interstitial ad impression has been tracked
- (void)interstitialAdImpressed:(IMInterstitial * _Nonnull)interstitial;
/// Notifies the delegate that the interstitial would be presented.
- (void)interstitialWillPresent:(IMInterstitial * _Nonnull)interstitial;
/// Notifies the delegate that the interstitial has been presented.
- (void)interstitialDidPresent:(IMInterstitial * _Nonnull)interstitial;
/// Notifies the delegate that the interstitial has failed to present with some error.
- (void)interstitial:(IMInterstitial * _Nonnull)interstitial didFailToPresentWithError:(IMRequestStatus * _Nonnull)error;
/// Notifies the delegate that the interstitial will be dismissed.
- (void)interstitialWillDismiss:(IMInterstitial * _Nonnull)interstitial;
/// Notifies the delegate that the interstitial has been dismissed.
- (void)interstitialDidDismiss:(IMInterstitial * _Nonnull)interstitial;
/// Notifies the delegate that the interstitial has been interacted with.
- (void)interstitial:(IMInterstitial * _Nonnull)interstitial didInteractWithParams:(NSDictionary<NSString *, id> * _Nullable)params;
/// Notifies the delegate that the user has performed the action to be incentivised with.
- (void)interstitial:(IMInterstitial * _Nonnull)interstitial rewardActionCompletedWithRewards:(NSDictionary<NSString *, id> * _Nonnull)rewards;
/// Notifies the delegate that the user will leave application context.
- (void)userWillLeaveApplicationFromInterstitial:(IMInterstitial * _Nonnull)interstitial;
@end


SWIFT_CLASS("_TtC9InMobiSDK28IMInterstitialPreloadManager")
@interface IMInterstitialPreloadManager : NSObject
/// Preload a Interstitial ad
/// It returns the following callbacks.
/// <ul>
///   <li>
///     Meta Information will be recieved from the callback <code>interstitial:didReceiveWithMetaInfo</code>
///   </li>
///   <li>
///     Failure of Preload will be recieved from the callback <code>interstitial:didFailToReceiveWithError</code>
///   </li>
/// </ul>
- (void)preload;
/// Loads a Preloaded Interstitial ad.
- (void)load;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


@protocol IMNativeDelegate;
@class UIImage;
@class NSURL;

/// Class to integrate native ads in your application
/// Adding native ads is demonstrated in the code fragment below.
/// Implement the following in the viewcontroller.
/// Swift code snippet:
/// \code
/// func viewDidLoad() {
///     super.viewDidLoad()
///     let nativeAd = IMNative(placementId: 11203280003, delegate: self)
///     nativeAd.load()
/// }
///
/// func nativeDidFinishLoading(_ native: IMNative) {
///     if let aView = native.primaryView(ofWidth: self.contentView.frame.size.width) {
///         self.contentView.addSubview(aView)
///     }
/// }
///
/// \endcodeObjective-C code snippet:
/// \code
/// - (void) viewDidLoad {
///     [super viewDidLoad];
///     self.nativeAd = [[IMNative alloc] initWithPlacementId:11203280003 delegate:self];
///     [self.nativeAd load];
/// }
///
/// - (void) nativeDidFinishLoading: (IMNative*)native{
///     [self.contentView addSubview:[native primaryViewOfWidth:self.contentView.frame.size.width]];
/// }
///
/// \endcodeThe code snippet above demonstrates a dead simple integration. Your application code can additionally listen for lifecycle events on the native ad by implementing the <code>IMNativeDelegate</code>.
SWIFT_CLASS("_TtC9InMobiSDK8IMNative")
@interface IMNative : NSObject
/// The placement ID for this Native Ad..
@property (nonatomic) int64_t placementId;
/// The delegate to receive callbacks
@property (nonatomic, weak) id <IMNativeDelegate> _Nullable delegate;
/// A free form set of keywords, separated by ‘,’ to be sent with the ad request.
/// E.g: “sports,cars,bikes”
@property (nonatomic, copy) NSString * _Nullable keywords;
/// Any additional information to be passed to InMobi.
@property (nonatomic, copy) NSDictionary<NSString *, id> * _Nullable extras;
/// contentUrl for OMSDK
@property (nonatomic, copy) NSString * _Nullable contentUrl;
/// The content of the native ad.
@property (nonatomic, readonly, copy) NSString * _Nullable customAdContent;
/// The title of the native ad.
@property (nonatomic, readonly, copy) NSString * _Nullable adTitle;
/// The description of the native ad.
@property (nonatomic, readonly, copy) NSString * _Nullable adDescription;
/// The icon url of the ad.
@property (nonatomic, readonly, strong) UIImage * _Nullable adIcon;
/// The text to be specified for the cta. Typically this should be the text of the button.
@property (nonatomic, readonly, copy) NSString * _Nullable adCtaText;
/// A custom rating field for the native ad.
@property (nonatomic, readonly, copy) NSString * _Nullable adRating;
/// The landing page url of the Native ad.
@property (nonatomic, readonly, copy) NSURL * _Nullable adLandingPageUrl;
/// Indicates if the ad is an app download ad.
@property (nonatomic, readonly) BOOL isAppDownload;
/// A unique identifier for the creative.
@property (nonatomic, readonly, copy) NSString * _Nullable creativeId;
/// Initializes an IMNative instance with the specified placementId.
/// \param placementId the placement Id registered on the InMobi portal.
///
- (nonnull instancetype)initWithPlacementId:(int64_t)placementId;
/// Initializes an IMNative instance with the specified placementId and delegate.
/// \param placementId the placement Id registered on the InMobi portal.
///
/// \param delegate the delegate to receive callbacks
///
- (nonnull instancetype)initWithPlacementId:(int64_t)placementId delegate:(id <IMNativeDelegate> _Nullable)delegate OBJC_DESIGNATED_INITIALIZER;
/// The primary view of the native ad.
/// This view is rendered by InMobi and should be used by the publisher to display the ad. Impressions will be computed on this view.
/// \param width The width of the primary view. Typically this should be the screen width.
///
- (UIView * _Nullable)primaryViewOfWidth:(CGFloat)width SWIFT_WARN_UNUSED_RESULT;
/// Loads a Native ad
- (void)load;
/// Loads a Native Ad with a response Object.
/// This is used for Open Auction use cases
/// \param response A <code>Data</code> variable which contains the InMobi Native Ad.
///
- (void)load:(NSData * _Nonnull)response;
/// Indicates if the native ad is ready to be displayed.
- (BOOL)isReady SWIFT_WARN_UNUSED_RESULT;
/// Reports the click action to the native ad and open the landing page.
- (void)reportAdClickAndOpenLandingPage;
/// Recycle the view that was presented by the native ad
- (void)recyclePrimaryView;
/// Contains additional information of ad.
- (NSDictionary<NSString *, id> * _Nullable)getAdMetaInfo SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end





/// A listener for receiving notifications during the lifecycle of a native ad.
/// <blockquote>
/// Note: All the events in this listener will be invoked on your application’s UI thread.
///
/// </blockquote>
/// In most cases your application will need to listen for the following events on a native ad.
/// The outcome of an ad request (if the request succeeded or failed): see
/// For Swift:
/// \code
/// func nativeDidFinishLoading(_ native: IMNative)
/// func native(_ native: IMNative, didFailToLoadWithError error: IMRequestStatus)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) nativeDidFinishLoading: (IMNative*)native;
/// - (void) native: (IMNative*)native didFailToLoadWithError: (IMRequestStatus*)error;
///
/// \endcodeThe ad opened an overlay that covered the screen. This means that the user can no longer interact with your application; see
/// For Swift:
/// \code
/// func nativeDidPresentScreen(_ native: IMNative)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) nativeDidPresentScreen: (IMNative*)native;
///
/// \endcodeThe ad opened overlay was dismissed. The user is now free to interact with your application: see
/// For Swift:
/// \code
/// func nativeDidDismissScreen(_ native: IMNative)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) nativeDidDismissScreen: (IMNative*)native;
///
/// \endcodeA user interaction with the ad will result in the User leaving your application context: see
/// For Swift:
/// \code
/// func userWillLeaveApplicationFromNative(_ native: IMNative)
///
/// \endcodeFor Objective-C:
/// \code
/// - (void) userWillLeaveApplicationFromNative: (IMNative*)native;
///
/// \endcode
SWIFT_PROTOCOL("_TtP9InMobiSDK16IMNativeDelegate_")
@protocol IMNativeDelegate
@optional
/// Notifies the delegate that the native ad has finished loading
- (void)nativeDidFinishLoading:(IMNative * _Nonnull)native;
/// Notifies the delegate that the native ad has failed to load with error.
- (void)native:(IMNative * _Nonnull)native didFailToLoadWithError:(IMRequestStatus * _Nonnull)error;
/// Notifies the delegate that the native ad would be presenting a full screen content.
- (void)nativeWillPresentScreen:(IMNative * _Nonnull)native;
/// Notifies the delegate that the native ad has presented a full screen content.
- (void)nativeDidPresentScreen:(IMNative * _Nonnull)native;
/// Notifies the delegate that the native ad would be dismissing the presented full screen content.
- (void)nativeWillDismissScreen:(IMNative * _Nonnull)native;
/// Notifies the delegate that the native ad has dismissed the presented full screen content.
- (void)nativeDidDismissScreen:(IMNative * _Nonnull)native;
/// Notifies the delegate that the user will be taken outside the application context.
- (void)userWillLeaveApplicationFromNative:(IMNative * _Nonnull)native;
/// Notifies the delegate that the native ad impression has been tracked
- (void)nativeAdImpressed:(IMNative * _Nonnull)native;
/// Notifies the delegate that the native ad has been interacted with.
- (void)native:(IMNative * _Nonnull)native didInteractWithParams:(NSDictionary<NSString *, id> * _Nullable)params;
/// Notifies the delegate that the native ad has finished playing media.
- (void)nativeDidFinishPlayingMedia:(IMNative * _Nonnull)native;
/// Notifies the delegate that the user has skipped the playing media.
- (void)userDidSkipPlayingMediaFromNative:(IMNative * _Nonnull)native;
/// Notifies the delegate that the media audio state has been changed - mute/unmute.
/// \param audioStateMuted is <code>YES</code> when audio is turned off and <code>NO</code> when audio is turned on.
///
- (void)native:(IMNative * _Nonnull)native adAudioStateChanged:(BOOL)audioStateMuted;
@end


SWIFT_CLASS("_TtC9InMobiSDK15IMRequestStatus")
@interface IMRequestStatus : NSError
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder SWIFT_UNAVAILABLE;
- (nonnull instancetype)initWithDomain:(NSString * _Nonnull)domain code:(NSInteger)code userInfo:(NSDictionary<NSString *, id> * _Nullable)dict SWIFT_UNAVAILABLE;
@end

/// User Age Group
typedef SWIFT_ENUM(NSInteger, IMSDKAgeGroup, closed) {
  IMSDKAgeGroupBelow18 = 1,
  IMSDKAgeGroupBetween18And24 = 2,
  IMSDKAgeGroupBetween25And29 = 3,
  IMSDKAgeGroupBetween30And34 = 4,
  IMSDKAgeGroupBetween35And44 = 5,
  IMSDKAgeGroupBetween45And54 = 6,
  IMSDKAgeGroupBetween55And65 = 7,
  IMSDKAgeGroupAbove65 = 8,
};

/// User Education
typedef SWIFT_ENUM(NSInteger, IMSDKEducation, closed) {
  IMSDKEducationHighSchoolOrLess = 1,
  IMSDKEducationCollageOrGraduate = 2,
  IMSDKEducationPostGraduateOrAbove = 3,
};

/// User Gender
typedef SWIFT_ENUM(NSInteger, IMSDKGender, closed) {
  IMSDKGenderMale = 1,
  IMSDKGenderFemale = 2,
};

/// SDK Log level
typedef SWIFT_ENUM(NSInteger, IMSDKLogLevel, closed) {
  IMSDKLogLevelNone = 0,
  IMSDKLogLevelError = 1,
  IMSDKLogLevelDebug = 2,
};


/// Use this class to set the user specific demographic info.
/// As part of the General Data Protection Regulation (“GDPR”) publishers who collect data on their apps, are required to have a legal basis for collecting and processing the personal data of users in the European Economic Area (“EEA”).
/// Please ensure that you obtain appropriate consent from the user before making ad requests to InMobi for Europe and indicate the same by following our recommended SDK implementation.
/// Please do not pass any demographics information of a user; if you do not have user consent from such user in Europe.
SWIFT_CLASS("_TtC9InMobiSDK5IMSdk")
@interface IMSdk : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// Initialize the sdk. This must be called before any other API for the SDK is used.
/// Use <code>initWithAccountID(_:andCompletionHandler:)</code>
/// \param accountID account id obtained from the InMobi portal.
///
/// \param completionBlock A block which is invoked once the SDK has been successfully initialised and is ready
///
+ (void)initWithAccountID:(NSString * _Nonnull)accountID andCompletionHandler:(void (^ _Nullable)(NSError * _Nullable))completionBlock SWIFT_METHOD_FAMILY(none);
/// Initialize the sdk. This must be called before any other API for the SDK is used.
/// \param accountID account id obtained from the InMobi portal.
///
/// \param consentDictionary InMobi relies on the publishers to obtain explicit consent from users for continuing business activities in EU as per GDPR . Consent dictionary allows publishers to indicate consent status as obtained from the users for InMobi services to function appropriately.
/// It has Three optional keys: <em>IM_SUBJECT_TO_GDPR</em>, <em>IM_GDPR_CONSENT_AVAILABLE</em>,
/// <em>IM_GDPR_CONSENT_IAB</em>
/// <code>   IM_SUBJECT_TO_GDPR</code>(String): Whether or not the request is subjected to GDPR        regulations (0 = No, 1 = Yes), omission indicates Unknown.
/// <code>IM_GDPR_CONSENT_AVAILABLE</code>(String): “true” : User has provided consent to collect and use data.
/// “false”: User has not provided consent to collect and use data.
/// <code>   IM_GDPR_CONSENT_IAB</code>(String): Key to send the IAB consent string.
///
/// \param completionBlock A block which is invoked once the SDK has been successfully initialised and is ready.
///
+ (void)initWithAccountID:(NSString * _Nonnull)accountID consentDictionary:(NSDictionary<NSString *, id> * _Nullable)consentDictionary andCompletionHandler:(void (^ _Nullable)(NSError * _Nullable))completionBlock SWIFT_METHOD_FAMILY(none);
/// Initialize the sdk. This must be called before any other API for the SDK is used.
/// \param accountID account id obtained from the InMobi portal.
///
/// \param consentDictionary InMobi relies on the publishers to obtain explicit consent from users for continuing business activities in EU as per GDPR . Consent dictionary allows publishers to indicate consent status as obtained from the users for InMobi services to function appropriately.
/// It has Three optional keys: <em>IM_SUBJECT_TO_GDPR</em>, <em>IM_GDPR_CONSENT_AVAILABLE</em>, <em>IM_GDPR_CONSENT_IAB</em>
/// <code>IM_SUBJECT_TO_GDPR</code>(String): Whether or not the request is subjected to GDPR regulations (0 = No, 1 = Yes), omission indicates Unknown.
/// <code>IM_GDPR_CONSENT_AVAILABLE</code>(String): “true” : User has provided consent to collect and use data.
/// “false”: User has not provided consent to collect and use data.
/// <code>IM_GDPR_CONSENT_IAB</code>(String): Key to send the IAB consent string.
///
+ (void)initWithAccountID:(NSString * _Nonnull)accountID consentDictionary:(NSDictionary<NSString *, id> * _Nullable)consentDictionary SWIFT_METHOD_FAMILY(none) SWIFT_DEPRECATED_MSG("Please use new API initWithAccountID:consentDictionary:andCompletionHandler: as this API can be removed in future");
/// Initialize the sdk. This must be called before any other API for the SDK is used.
/// \param accountID account id obtained from the InMobi portal.
///
+ (void)initWithAccountID:(NSString * _Nonnull)accountID SWIFT_METHOD_FAMILY(none) SWIFT_DEPRECATED_MSG("Please use new API initWithAccountID:andCompletionHandler: as this API can be removed in future");
/// Updates the user consent for a session of the app
/// \param consentDictionary consent dicionary allows publishers to provide its consent to collect user data and use it.
/// It has Three optional keys: <em>IM_SUBJECT_TO_GDPR</em>, <em>IM_GDPR_CONSENT_AVAILABLE</em>, <em>IM_GDPR_CONSENT_IAB</em>
/// <code>IM_SUBJECT_TO_GDPR</code>(String): Whether or not the request is subjected to GDPR regulations (0 = No, 1 = Yes), omission indicates Unknown.
/// <code>IM_GDPR_CONSENT_AVAILABLE</code>(String): “true”: User has provided consent to collect and use data.
/// “false”: User has not provided consent to collect and use data.
/// <code>IM_GDPR_CONSENT_IAB</code>(String): Key to send the IAB consent string.
///
+ (void)updateGDPRConsent:(NSDictionary<NSString *, id> * _Nullable)consentDictionary;
/// Updates the user consent (through mediation partner)  for a session of the app
/// \param consentDictionary consent dicionary allows partners to provide its consent to collect user data and use it.
/// It has Two optional keys: <em>IM_PARTNER_GDPR_CONSENT_AVAILABLE</em>, <em>IM_PARTNER_GDPR_APPLIES</em>
/// <code>IM_PARTNER_GDPR_CONSENT_AVAILABLE</code>(String): “true” : User has provided consent to collect and use data.
/// “false”: User has not provided consent to collect and use data.
/// <code>IM_PARTNER_GDPR_APPLIES</code>(String): Whether or not the request is subjected to GDPR regulations (0 = No, 1 = Yes), omission indicates Unknown.
///
+ (void)setPartnerGDPRConsent:(NSDictionary<NSString *, id> * _Nullable)consentDictionary;
/// Provide if user is age restricted or not
/// \param isRestricted The user’s age restriction. Default value is false
///
+ (void)setIsAgeRestricted:(BOOL)isRestricted;
/// Use this to get the version of the SDK.
///
/// returns:
/// The version of the SDK.
+ (NSString * _Nonnull)getVersion SWIFT_WARN_UNUSED_RESULT;
/// Set the log level for SDK’s logs
/// \param desiredLogLevel The desired level of logs, <code>IMSDKLogLevel</code>.
///
+ (void)setLogLevel:(enum IMSDKLogLevel)desiredLogLevel;
@end


@interface IMSdk (SWIFT_EXTENSION(InMobiSDK))
/// Use this API to get token for Audience Bidding.
///
/// returns:
/// The token string.
+ (NSString * _Nullable)getToken SWIFT_WARN_UNUSED_RESULT;
/// Use this API to get token for Audience Bidding.
/// \param extras Any additional information to be passed to InMobi.
///
/// \param keywords A free form set of keywords, separated by ‘,’ to be sent with the ad request.
///
///
/// returns:
/// The token string.
+ (NSString * _Nullable)getTokenWithExtras:(NSDictionary<NSString *, id> * _Nullable)extras andKeywords:(NSString * _Nullable)keywords SWIFT_WARN_UNUSED_RESULT;
@end


@interface IMSdk (SWIFT_EXTENSION(InMobiSDK))
/// Enable or disable the AVAudioSession management by SDK
/// Indicates whether the application wants to manage audio session. If set as NO, the InMobi SDK will stop managing AVAudioSession during the HTML video playback lifecycle. If set as YES,
/// the InMobi SDK will manage AVAudioSession. That might set AVAudioSession’s category to AVAudioSessionCategoryAmbient and categoryOption to AVAudioSessionCategoryOptionMixWithOthers,
/// when HTML video is rendering. This setting will not stop the app audio from playing in an app. It will mix with ad audio and if any sound playing in another app, it will stop that sound and play the ads’
/// sound and once the ad is dismissed it notifies another app.
/// \param value Boolean depicting enable or disable the AVAudioSession management by SDK
///
+ (void)shouldAutoManageAVAudioSession:(BOOL)value;
/// Use this to set the global state of the SDK to mute.
/// \param shouldMute Boolean depicting the mute state of the SDK
///
+ (void)setMute:(BOOL)shouldMute;
/// Set Unified Id procured from vendors directly.
/// The ids are to be submitted in the following format.
/// key would be the vendor and value would be the identifier.
/// \code
/// {
/// "id5" :  "jkfid3ufolkb89hgvhb@$dj!@?#",
/// "live Ramp":  "$fvjk@kjfsk%$nfkvd9008jkf"
/// }
///
/// \endcode\param ids Represents the unified ids in dictionary format.
///
+ (void)setPublisherProvidedUnifiedId:(NSDictionary<NSString *, id> * _Nonnull)ids;
@end

@class CLLocation;

@interface IMSdk (SWIFT_EXTENSION(InMobiSDK))
/// Provide the user’s age to the SDK for targetting purposes.
/// \param age The user’s age.
///
+ (void)setAge:(NSInteger)age;
/// Provide the user’s area code to the SDK for targetting purposes.
/// \param areaCode The user’s area code.
///
+ (void)setAreaCode:(NSString * _Nullable)areaCode;
/// Provide the user’s age group to the SDK for targetting purposes.
/// \param ageGroup The user’s age group, <code>IMSDKAgeGroup</code>.
///
+ (void)setAgeGroup:(enum IMSDKAgeGroup)ageGroup;
/// Provide a user’s date of birth to the SDK for targetting purposes.
/// \param parameter yearOfBirth The user’s date of birth.
///
+ (void)setYearOfBirth:(NSInteger)yearOfBirth;
/// Provide the user’s education status to the SDK for targetting purposes.
/// \param education The user’s education status, <code>IMSDKEducation</code>.
///
+ (void)setEducation:(enum IMSDKEducation)education;
/// Provide the user’s gender to the SDK for targetting purposes.
/// \param gender The user’s gender, <code>IMSDKGender</code>.
///
+ (void)setGender:(enum IMSDKGender)gender;
/// Provide the user’s interests to the SDK for targetting purposes.
/// \param interests The user’s interests.
///
+ (void)setInterests:(NSString * _Nullable)interests;
/// Provide the user’s preferred language to the SDK for targetting purposes.
/// \param language The user’s language.
///
+ (void)setLanguage:(NSString * _Nullable)language;
/// Provide the user’s location to the SDK for targetting purposes.
/// \param city The user’s city.
///
/// \param state The user’s state.
///
/// \param country The user’s country.
///
+ (void)setLocationWithCity:(NSString * _Nullable)city state:(NSString * _Nullable)state country:(NSString * _Nullable)country;
/// Provide the user’s location to the SDK for targetting purposes.
/// \param location The location of the user
///
+ (void)setLocation:(CLLocation * _Nullable)location;
/// Provide the user’s postal code to the SDK for targetting purposes.
/// \param postalcode The user’s postalcode.
///
+ (void)setPostalCode:(NSString * _Nullable)postalcode;
@end

/// Enumeration for error codes
/// Collection of codes indicating the status of an ad request.
typedef SWIFT_ENUM(NSInteger, IMStatusCode, closed) {
  IMStatusCodeNetworkUnReachable = 0,
  IMStatusCodeNoFill = 1,
  IMStatusCodeRequestInvalid = 2,
  IMStatusCodeRequestPending = 3,
  IMStatusCodeRequestTimedOut = 4,
  IMStatusCodeMultipleLoadsOnSameInstance = 5,
  IMStatusCodeInternalError = 6,
  IMStatusCodeServerError = 7,
  IMStatusCodeAdActive = 8,
  IMStatusCodeEarlyRefreshRequest = 9,
  IMStatusCodeDroppingNetworkRequest = 10,
  IMStatusCodeIncorrectPlacementID = 11,
  IMStatusCodeSdkNotInitialised = 12,
  IMStatusCodeInvalidBannerframe = 13,
};


SWIFT_PROTOCOL("_TtP9InMobiSDK19IMUnifiedIdDelegate_")
@protocol IMUnifiedIdDelegate
/// Publishers should implement this protocol to fetch unified ids
/// Publisher should send this delegate in <code>IMUnifiedIdService fetchUnifiedIds:(id<IMUnifiedIdDelegate>)delegate</code>
/// \param response contains unified ids procured from InMobi supported vendors
///
/// \param error contains reason on why unified ids were not fetched.
///
- (void)onFetchCompleted:(NSDictionary<NSString *, id> * _Nullable)response error:(NSError * _Nullable)error;
@end

@class IMUserDataModel;

/// Class to integrate UnifiedIdService
SWIFT_CLASS("_TtC9InMobiSDK18IMUnifiedIdService")
@interface IMUnifiedIdService : NSObject
/// Update user’s data to InMobiUnifiedIdService in hashed form.
/// This method is used for identifying the user for user targeted ads.
/// <blockquote>
/// Note:
///
/// </blockquote>
/// <ul>
///   <li>
///     <code>InMobiUnifiedIdService</code> does not persist users info.
///   </li>
///   <li>
///     It holds only the hashed info for a sessions lifetime.
///   </li>
///   <li>
///     Expected to be called on every app session and on user login.
///   </li>
/// </ul>
/// \param data Represents user email and phone number in hashed format
///
+ (void)push:(IMUserDataModel * _Nullable)data;
/// Clears all UnifiedId info.
/// Expected to be called on user logout.
/// <ul>
///   <li>
///     It cancels all ongoing requests (Push and fetch).
///   </li>
///   <li>
///     Clears publisher provided unified ids.
///   </li>
/// </ul>
+ (void)reset;
/// Retrieves unified id from InMobi supported vendors.
/// \param delegate Represents the callback that delivers the unified ids.
///
+ (void)fetchUnifiedIds:(id <IMUnifiedIdDelegate> _Nullable)delegate;
/// For testing unified id on simulators, publisher needs to enable debug mode.
/// Default value will be No. Debug mode is only for simulators, wont work on actual devices
/// \param debugMode Set true to enable debug mode.
///
+ (void)enableDebugMode:(BOOL)debugMode;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class IMUserDataTypes;

/// Use this class to create data model for passing user data to <code>IMUnifiedIdService</code>.
/// As part of the General Data Protection Regulation (“GDPR”) publishers who collect data on their apps, are required to have a legal basis for collecting and processing the personal data of users in the European Economic Area (“EEA”).
/// Please ensure that you obtain appropriate consent from the user before making ad requests to InMobi for Europe and indicate the same by following our recommended SDK implementation.
/// Please do not pass any demographics information of a user; if you do not have user consent from such user in Europe.
/// <code>IMUserDataModel</code> is Data Model for passing user data in hashed form to <code>IMUserDataModel</code>.
SWIFT_CLASS("_TtC9InMobiSDK15IMUserDataModel")
@interface IMUserDataModel : NSObject <NSCopying>
@property (nonatomic, strong) IMUserDataTypes * _Nullable phoneNumber;
@property (nonatomic, strong) IMUserDataTypes * _Nullable emailId;
@property (nonatomic, copy) NSDictionary<NSString *, id> * _Nullable extras;
/// Creates the object of type <code>IMUserDataModel</code>
/// \param phoneNumber phone number of the user in hashed format
///
/// \param emailId emailId of the user in hashed format
///
/// \param extras any additional information about the user to be passed to InMobi
///
- (nonnull instancetype)initWithPhoneNumber:(IMUserDataTypes * _Nullable)phoneNumber emailId:(IMUserDataTypes * _Nullable)emailId extras:(NSDictionary<NSString *, id> * _Nullable)extras OBJC_DESIGNATED_INITIALIZER;
/// Creates and returns a copy of existing object
- (id _Nonnull)copyWithZone:(struct _NSZone * _Nullable)zone SWIFT_WARN_UNUSED_RESULT;
/// Compares two objects of class IMUserDataTypes and returns boolean value to indicate the same
/// \param other the 2nd object (of type    <code>IMUserDataModel</code>) that you want to compare this object with
///
///
/// returns:
/// true or false
- (BOOL)isEqual:(id _Nullable)other SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// Use this class to create user data in hashed format.
/// User email and phone number are 2 key pieces of information that can be hashed and held via using <code>IMUserDataTypes</code> & <code>IMUserDataModel</code> classes of InMobi SDK.
/// As part of the General Data Protection Regulation (“GDPR”) publishers who collect data on their apps, are required to have a legal basis for collecting and processing the personal data of users in the European Economic Area (“EEA”).
/// Please ensure that you obtain appropriate consent from the user before making ad requests to InMobi for Europe and indicate the same by following our recommended SDK implementation.
/// Please do not pass any demographics information of a user; if you do not have user consent from such user in Europe.
/// <code>IMUserDataTypes</code> is Data Model for holding user data in hashed format
/// that uses InMobiUserDataTypes to hold on to user email and phone number
SWIFT_CLASS("_TtC9InMobiSDK15IMUserDataTypes")
@interface IMUserDataTypes : NSObject <NSCopying>
@property (nonatomic, copy) NSString * _Nullable md5;
@property (nonatomic, copy) NSString * _Nullable sha1;
@property (nonatomic, copy) NSString * _Nullable sha256;
/// Creates the object of type IMUserDataTypes
/// \param md5 the md5 value of the data (e.g. phone number) that user wants to send to Unified service
///
/// \param sha1 the sha1 value of the data (e.g. phone number) that user wants to send to Unified service
///
/// \param sha256 the sha256 value of the data (e.g. phone number) that user wants to send to Unified service
///
- (nonnull instancetype)initWithMd5:(NSString * _Nullable)md5 sha1:(NSString * _Nullable)sha1 sha256:(NSString * _Nullable)sha256 OBJC_DESIGNATED_INITIALIZER;
/// Creates and returns a copy of existing object
- (id _Nonnull)copyWithZone:(struct _NSZone * _Nullable)zone SWIFT_WARN_UNUSED_RESULT;
/// Compares two objects of class IMUserDataTypes and returns boolean value to indicate the same
/// \param other the 2nd object (of type <code>IMUserDataTypes</code>) that you want to compare this object with
///
///
/// returns:
/// true or false
- (BOOL)isEqual:(id _Nullable)other SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end




#endif
#if defined(__cplusplus)
#endif
#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#pragma clang diagnostic pop
#endif

#else
#error unsupported Swift architecture
#endif
